Google
 

Trailing-Edge - PDP-10 Archives - 6.1_emacs_manuals_1er - emacs/pascal.:ej
There are no other files named pascal.:ej in the archive.
pW
[0+8+FQ(+4)[1
0FO10F"G+Q1'
+FQ()+4U1
FQ1"L0'
,Q1:M(Q1+4(]1]0))
   )'@'a/I9uHgP.BY;]f7zr
~*X,*#%m0"M<?GdO*'^(xnn{y=81R&4j/1'8:kC1oK#Y;e;o;Ey;-1hExHv	c2	\Q	^	+Zy	7	E]3	PM	a`	pa	}bL

ay
Z

$[e
0Y
:TB
KW`
WH/
g@0
q@+
xgJ&& Align Global Pascal Comment Ends& Back Level& Back to Token& Default Init PASCAL Mode& Indent Line& Pascal DO-OF& Pascal REPEAT-RECORD& Pascal Subroutine& Setup PASCAL Library- Pass OverCapitalize Pascal KeywordsExpand Abbrevs in RegionGlobal Pascal CommentIndent Pascal RegionMaybe Make VariablePASCAL ModePrint Last Pascal Indenter ^R End Global Pascal Comment^R Find Unmatched Paren^R Indent PASCAL Stmt^R Insert Pascal End^R Pascal BEGIN^R Pascal CASE^R Pascal ELSE^R Pascal FOR^R Pascal FUNCTION^R Pascal IF^R Pascal Indent Relative^R Pascal PROCEDURE^R Pascal PROGRAM^R Pascal RECORD^R Pascal REPEAT^R Pascal WHILE^R Pascal WITH^R Plus One^R Slurp Pascal to Char^R Start String^R Toggle Indentation~DIRECTORY~,~DOC~ & Align Global Pascal Comment Ends~DOC~ & Back Level~DOC~ & Back to Token$~DOC~ & Default Init PASCAL Mode~DOC~ & Indent Line~DOC~ & Pascal DO-OF ~DOC~ & Pascal REPEAT-RECORD~DOC~ & Pascal Subroutine ~DOC~ & Setup PASCAL Library~DOC~ - Pass Over$~DOC~ Capitalize Pascal Keywords"~DOC~ Expand Abbrevs in Region~DOC~ Global Pascal Comment~DOC~ Indent Pascal Region~DOC~ Maybe Make Variable~DOC~ PASCAL Mode$~DOC~ Print Last Pascal Indenter&~DOC~ ^R End Global Pascal Comment!~DOC~ ^R Find Unmatched Paren~DOC~ ^R Indent PASCAL Stmt~DOC~ ^R Insert Pascal End~DOC~ ^R Pascal BEGIN~DOC~ ^R Pascal CASE~DOC~ ^R Pascal ELSE~DOC~ ^R Pascal FOR~DOC~ ^R Pascal FUNCTION~DOC~ ^R Pascal IF#~DOC~ ^R Pascal Indent Relative~DOC~ ^R Pascal PROCEDURE~DOC~ ^R Pascal PROGRAM~DOC~ ^R Pascal RECORD~DOC~ ^R Pascal REPEAT~DOC~ ^R Pascal WHILE~DOC~ ^R Pascal WITH~DOC~ ^R Plus One!~DOC~ ^R Slurp Pascal to Char~DOC~ ^R Start String~DOC~ ^R Toggle Indentation~DOC~ ~FILENAME~~FILENAME~
~INVERT~Lm.m- Pass Overm.vMM - Pass Over
m.m& Back to Tokenm.vMM & Back to Token
m.m& Back Levelm.vMM & Back Level
m.m& Indent Linem.vMM & Indent Line
0,0m(m.mMaybe Make Variable)Pascal Called
#m(m.m & Init Buffer Locals)
1,:i*(*m.LComment Startw
1,:i*(* m.LComment Beginw
1,:i* *)M.LComment Endw
1,:i*m.lLast Pascal Indenterw
[email protected] ..D
QD"E:iD                                                                                                                                        A                             A   AA    A   AA   AA    A    |    (    )(   A    A         A    A    A   AA   AA   AA   AA   AA   AA   AA   AA   AA   AA    A    A    A    A    A    A    A   AA   AA   AA   AA   AA   AA   AA   AA   AA   AA   AA   AA   AA   AA   AA   AA   AA   AA   AA   AA   AA   AA   AA   AA   AA   AA    (    A    )[   A   AA    A   AA   AA   AA   AA   AA   AA   AA   AA   AA   AA   AA   AA   AA   AA   AA   AA   AA   AA   AA   AA   AA   AA   AA   AA   AA   AA    (    A    ){   A        
qDM.VPASCAL ..D'
qDm.q..D
[email protected] Mode Hook"e
m(m.m& Default Init PASCAL Mode)'
1M(M.M& Set Mode Line)PASCAL
[email protected] Global Indentation[.2
Q.2*QPascal Called"E
m.mMaybe Make Variable[.1
-(Q.2"'E)(2*QPascal Called)U.2
1UPascal Called
[1
[email protected] After EverythingU1
Q1"N
Q.2,Q1m.1Begin-Block Body Indentation
Q.2,Q1m.1If-Block Body Indentation
Q.2,Q1m.1Decl Body Indentation
Q.2,Q1m.1Procedure Body Indentation
'
[email protected] Body IndentationU1
Q.2,Q1m.1Indent after BEGIN
Q.2,Q1m.1Indent after REPEAT
Q.2,Q1m.1Indent After CASE
Q.2,Q1m.1Indent After OF
Q.2,Q1m.1Indent After RECORD
Q.2,Q1m.1Indent After LOOP
4fo..qIf-Block Body IndentationU1
Q.2,Q1m.1Indent after DO
Q.2,Q1m.1Indent after IF
Q.2,Q1m.1Indent after THEN
Q.2,Q1m.1Indent after ELSE
8fo..qDecl Body IndentationU1
Q.2,Q1m.1Indent After LOOP
Q.2,Q1m.1Indent After CONST
Q.2,Q1m.1Indent After TYPE
Q.2,Q1m.1Indent After VAR
Q.2,Q1m.1Indent After LABEL
4fo..qProcedure Body IndentationU1
Q.2,Q1m.1Indent After PROCEDURE
Q.2,Q1m.1Indent After FUNCTION
Q.2,Q1m.1Indent After PROGRAM
Q.2,Q1m.1PROCEDURE Body Indentation
Q.2,Q1m.1FUNCTION Body Indentation
Q.2,Q1m.1PROGRAM Body Indentation
'
r1,0m.LCOMMENT COLUMNw
1,:i*+1m.lcomment roundingw
1,(m.m^R Indent Comment Relative)m.q...{
1,q(1,q.m.Qw)m.Q.
1,(m.m^R Indent Pascal Stmt)m.qI
1,(m.mPrint Last Pascal Indenter)m.q...?
1,(m.m^R Slurp Pascal To Char)m.q..{
1,(m.m^R Find Unmatched Paren)m.q..(
1,(m.m^R Plus One)m.q...+
1,(m.m^R Start String)m.q...'
1,(m.m^R Toggle Indentation)m.q..|
1,(m.m^R Insert Pascal End)m.q..}
1,(m.m^R Pascal WHILE)m.q...W
1,(m.m^R Pascal FOR)m.q...F
1,(m.m^R Pascal WITH)m.q...H
1,(m.m^R Pascal CASE)m.q...C
1,(m.m^R Pascal IF)m.q...I
1,(m.m^R Pascal ELSE)m.q...E
1,(m.m^R Pascal PROCEDURE)m.q...P
1,(m.m^R Pascal FUNCTION)m.q...U
1,(m.m^R Pascal PROGRAM)m.q...G
1,(m.m^R Pascal REPEAT)m.q...R
1,(m.m^R Pascal RECORD)m.q...D
1,(m.m^R Pascal BEGIN)m.q...B
[email protected] Auto Fill Default(
)m(m.m Auto Fill Mode)
1,1m.LSpace Indent Flagw
[email protected] Capitalization"N
m(m.mCapitalize Pascal Keywords)'
W.[.0
1:<-ful>"Nq.0j:i*NUP	No Unmatched ParenthesesFSErr'
ff&1"N:q.0j'
ff"'E*([email protected] Align Only"'E)"E
:iLast Pascal Indenter^R Indent Nested
f@m(m.m^R Indent Nested)'
FSHPos"N@m(m.m^R Pascal Indent Relative)'
@f 	K
m(m.m& Indent Line)[x[y
fsrgetty"nQy,Qx'
fsechodisAfsechodis
0tQy,Qx_<-@f 	L."E'
(0A-))*(0A-})"E
R1:<-ful>"N
J''
"#(0A-39)"E!"!R-:@f'-1J'
"#0;''>0<M(M.M- Pass Over)
."E'
(0A-
):@;
0:L>
[.p[tff"E-1'"#'[l
.U.pfnQ.pJ
<1:C
-:sBEGINRECORDCASELOOPREPEATENDUNTIL)'"E:i*NMB	No matching block statementFSErr'
(1A-))*(1A-})*(1A-')"ECM(M.M- Pass Over)!<!>'
1cfwf(f~ENDUt)f~UNTIL*qt"E
Ql-1Ul'
"#Ql+1Ul'
QL;>
0U..n=	[1[2[i-1[x.[a[b[c:i*
z-.[3fnZ-Q3J
-4fU1F[VB
1:<-:ful>"E
:ilIndent Unmatched Open Paren
@f 	LFSHPosUi
0Ux
oDONE2'
f]VBw
[email protected] ENDs"'N[s
0:LM(M.M& Back to Token)
."E'
<0A-;"EQx"L-2Ux'RoLOOP'
0A:f"A"C-fwL'
"#!"!-:s')}fkc'
oLOOP'
-fwf(x1)L
Qx"L
Qx+1"[email protected] After 1Ux'
"#(f~1PROCEDURE)*(f~1FUNCTION)*(f~1PROGRAM)"E
[email protected] After 1Ux''
Qx"G:ilIndent After 1''
(f~1END)*(f~1UNTIL)"E
Qx"L0Ux'
Qs"L
0f:Usw
'
-1M(M.M& Back Level)
Qs"N
(Qs-.)"G
:ill (Back Over BEGIN/END)
.([email protected] Block Word"E
0L@f	 L'
fsHPOS(
QsJ
)M(M.M& Indent)
0L.Ua
)J0Us'
"#-1Us'
fwf~BEGIN"E
m(m.m& Back to Token)''
'
"#[email protected] Block Word"N
(f~1REPEAT)*(f~1BEGIN)*(f~1RECORD)*(f~1CASE)"E
FSHPosUioDONE1'''
!LOOP!
M(M.M- Pass Over)
.@;
(0A-
)@;>
Qx:"G
<.Us0:L
M(m.m& Back to Token)
.@;
0A-;@;
-fwx1
f~1ELSE"E-:STHEN;'
(f~1BEGIN)@;
(f~1REPEAT)@;
(f~1RECORD)@;
(f~1OF)@;
(f~1VAR)@;
(f~1TYPE)@;
(f~1CONST)@;
(f~1LABEL)@;
>
QsJ0L
0Ux'
@f 	LFSHPosUi
!DONE1!
Qx:"G:ilIndent After Statementl'
!DONE2!
QlULast Pascal Indenter
m..n0u..n
0,Qx+Qim(m.m& XIndent)
Qa,.fff"E
[email protected] Align Only"'Em.lIndent Align Onlym.lIndent'
"#M.LIndent Align OnlyW'0(.[.1fnq.1j
[.2.(0l.[.4)J
0[.3
-1M(M.M& Back Level)fwx.6
.U.2
.([email protected] Block Word"E
0L@f	 L'
fshpos[.7)J
f~.6REPEAT
f~.6RECORD
f~.6LOOP
s(*{
@f 	L
.(s}*)fkc-@f 	L),.X.3
'"#
Qr*Qd*Ql"N
1<Q.2J
f~.6BEGIN"E
m(m.m& Back To Token)-fwx.6'
f~.6CASE"E:i.6OF'"#
f~.6THEN"E-sIF'"#
f~.6DO"E-sWITHWHILEFOR'"#
0;'''
.(s.6fkc-@f
	,.x.3>
''
q.1J
0L@f 	m(m.m& Save For Undo)Insert Pascal End
q.7m(m.m& Indent)
Qr"E
iUNTIL ;.-1u.1'
"#iEND;.u.1'
[email protected] Capitalization"E
-fwfc'
[email protected] Comments*q.3"N
i gComment Beging.3gComment End
Qr"N.u.1''
q.2j
0@v
*30:w
e:,.f[.2[.1
Q.1,Q.2m(m.m& Save For Undo)Pascal Region Indent
q.1j(z-q.2)u.2
<<@F
	 L
(.-z-2);
2f~(*"E:s*)"EzJ''"#-;'>
.-(z-q.2);
0l@f	 K
@m(m.m^R Indent Pascal Stmt)w
l>
(z-q.2)j
i


2r@m(m.m^R Indent Pascal Stmt)w
0l-2dk
q.1
z-q.2j
[email protected] Abbreviations In Use"N
m(m.mExpand Abbrevs In Region)'
q.1,.[qLast Pascal Indenter[.1
:iLast Pascal Indenter.1(^R Pascal Indent Relative)
[1@:I1|qLast Pascal Indenteru.1
:iLast Pascal Indenter.1(^R Tab to Tab Stop)
:M(M.M^R Tab to Tab Stop)|
0,1af 	+1"G
0,0af 	+1"G
fshpos-1(
-d)m(m.m& Indent)w
''
.[PFSHPOS[0
@-f 	L
.[QFSHPOS[2
0L<B-."EQPJ:m1'
-L1A-15."N0;'>
Q0"G1:<0,Q0+1:FM>"ER'
"#0L1:<0,Q2+1:FM>"ER'
"#QPJ:M1'''
<:@F.,;	 
@F.,;	 L
>
FSHPOS(QQ,QPK
):M(M.M& Indent)'[email protected] of Comments Flag"N
f:@m(m.m^R Indent for Comment)'
0m.vGlob of Comments Flag
1[Glob of Comments Flagw
:i*Global Comment[..j
10[Comment Column
0[Comment Begin
:i*(**[Comment Start
1[Space Indent Flag
1[Auto Fill Mode
@m(m.m^R Indent for Comment)
w
0f"NL'
fsz-.f[vzw
m(m.m& Align Global Pascal Comment Ends)
zjf]vz
.f[vb
m(m.m& Align Global Pascal Comment Ends)
o[.1[.2[.3
bj
<:s(**;fkc
0u.1
0u.2
0u.3
.(<:fb(**;
%.3w
.-1f 
4f=* *)"E1u.2'
:fb*);
fshpos,q.1fu.1w
l>
fsz-.f[vzw
)j
q.3-1"E
q.2"N
-@f 	bk
[email protected] Star Line Widthu.1''
q.1-2u.1
q.2"N
(q.1-qComment Column-3&1)+q.1u.1'
<:s*);
-7f=(* * *)"E
2r
q.1-(fshpos)/2<i* >
2c'
2rq.1m(m.m& Indent)f
l>
zjf]vzw
>
N@m(m.m^R End Comment)f
ff"G
.(bj
<:s(**;.-1f >
)j'
fs^R Exit[.1[.2[.3[.4[.5[.6
m.ifiu.5
z-.u.1
0l@f 	r
z-.u.6
0:lz-.u.3
.m(m.m& Back Over Pascal Line Comment)j
.u.2
<.,(0l).:fb.5;>
.,q.2f(fx.4)f
z-.-q.3"N
@m(m.m^R Indent for Comment)f'
z-q.6j
.,(g.4i).f
0l
@m(m.m^R Indent Pascal Stmt)f
z-q.1jw1aqLast Pascal Indenter[.0
fsechodisplayw
Cfsechodisplayw
@ft.0
0fsechoactivew
%[.1
ff"E1u.1'"#u.1'
q.1"[email protected] Abbreviations In Use"N
0m(m.mWord Abbrev Mode)
0m.vPascal Abbreviations In Use
0m.lAutomatic Capitalization''
[email protected] Abbreviations In Use"N'
1m.vPascal Abbreviations In Use
1m.lAutomatic Capitalization
[email protected] Loaded"E
m(m.mLoad Library)WORDAB
1m.vWORDAB Loaded'
m(m.mWord Abbrev Mode)
m(m.mRead Word Abbrev File)EMACS;PASCAL DEFN
of[vbf[vz:,.ffsBoundwj
[..d:g..du..d^*5:f 
[a
<f[vz0ua
.(:s(*"nfsz-.fsvzw:ia*)')j
.(:s{"nfsz-.fsvzw:ia}')j
!"!.(:s'"nfsz-.fsvzw!"!:ia'')j
<1:<fwl>@:;
m(m.m^R Abbrev Expand Only)
>
f]vzqa@;:sa;
>
bzjFF"E10[0'"#
:"G10[0'"#[0''
i''RQ0, i
Z-(.+1)[1Q0R
1[Overwrite Mode
[..J:I..JFill in string (Ovwrt) 
.-1,.+Q0+1
Z-Q1J05[a.(
<-FWL.@;
(0A-."'E)+(0A-["'E)+(0A-]"'E);>
.[1)J
Q1,.M(M.M& Save for Undo)Plus One
QWord Abbrev Mode"N
m(m.m^R Abbrev Expand Only)'
Q1,.Xa
I:= GaI + 1;Q1,.[c:ic
[e:ie
[d:id
FF*[b
Qb"L-Qb+1'"#.,.'M(M.M& Save for Undo)Insert c Statement
.[p.[s
.(0L@F 	LQp-."LQpJ'fsHPos[1)J
[email protected]e on same line*(Qb:"'G)"E
[email protected] after DO+'Q1[2
Qb:"[email protected] after e+'(
)Q2U3
fsHPos,Q1m(m.m& XIndent)Ic #d
Qb:"G
[email protected]e on same line"Ei

0,(Q2)m(m.m& XIndent)'"#i '
Ie'
Qb"L.
[email protected] Capitalization"E
Qs,.fc'
-Qb+1:L
Q3-Q1m(m.m^R Indent Rigidly)
:J.Us'
"#i

0,Q3m(m.m& XIndent)'
Qb:"G
i

0,(Q2)m(m.m& XIndent)
IEND;mail protected] Comments"Ni gComment BegingcgComment End''
[email protected] Capitalization"E
Qs,.fc'
.[rQpJs#-DQp,Qr-1,Fm(m.m& Pascal DO-OF)WHILEBEGIN DO*Fm(m.m& Pascal DO-OF)FORBEGIN DO+Fm(m.m& Pascal DO-OF)WITHBEGIN DO;1M.LOF On Same Line
Fm(m.m& Pascal DO-OF)CASEOFvFF*[b
.[p.[s
.(0L@F 	LQp-."LQpJ'fsHPos[1)J
Qb"L-Qb+1'"#.,.'M(M.M& Save for Undo)Insert IF Statement
[email protected] on same line"[email protected] after IF+'(
)Q1[2
[email protected] on same line*(Qb:"'G)"E
[email protected] after THEN+'Q2[3
Qb:"[email protected] after BEGIN+'(
)Q3U4
IIF #
[email protected] on same line"Ei

0,Q2m(m.m& XIndent)'"#i '
ITHEN'
Qb:"G
[email protected] on same line"Ei

0,Q3m(m.m& XIndent)'"#i '
IBEGIN'
Qb"L.
[email protected] Capitalization"E
Qs,.fc'
-Qb+1:L
Q4-Q1m(m.m^R Indent Rigidly)
:J.Us'
"#i

0,Q4m(m.m& XIndent)'
Qb:"G
i

0,Q3m(m.m& XIndent)
IEND;mail protected] Comments"Ni gComment BeginiIFgComment End''
[email protected] Capitalization"E
Qs,.fc'
.[rQpJs#-DQp,Qr-1 FF*[b
.[s
Qb"L.(-Qb+1L.[y)J'"#.[y'
m(m.m& Back to Token)
(0A-;)"E
.-1,QyM(M.M& Save for Undo)Insert ELSE Statement
-D(Qs-1)Us'
"#Qs,QyM(M.M& Save for Undo)Insert ELSE Statement'
.(QsJ)Us
[email protected] On Same Line"NQSJI '
.[p
.(0L@F 	LQp-."LQpJ'fsHPOS[1)J
[email protected] on same line*(Qb:"'G)"E
[email protected] after ELSE+'Q1[2
Qb:"[email protected] after BEGIN+'(
)Q2U3
IELSE
Qb:"G
[email protected] on same line"Ei

0,Q2m(m.m& XIndent)'"#i '
IBEGIN'
Qb"L.
[email protected] Capitalization"E
Qs,.fc'
-Qb+1:L
Q3-Q1m(m.m^R Indent Rigidly)
:J.Us'
"#i

0,Q3m(m.m& XIndent)'
i#
Qb:"G
i

0,Q2m(m.m& XIndent)
IEND;mail protected] Comments"Ni gComment BeginiELSEgComment End''
[email protected] Capitalization"E
Qs,.fc'
.[rQxJs#-DQx,Qr-1a[email protected] Capitalization
[n[c[d[s
FF[b
:ic
:is
q..o,(f[bbind
)m(m.m& minibuffer)c Name and Arguments (End with <esc><esc>)'
j@f 	LFWXn
.,Z-2xd
f]bbind
.Up
.,.M(M.M& Save for Undo)insert c block
.(0L@F 	LQp-."LQpJ'FSHPos[1)J
Q1+([email protected]c Body Indentation)[2
Q2+([email protected] after BEGIN)[3
Q1+([email protected] After c)[4
gcQa"E-fwfc'
i Gd
I;


Qb"E
0,Q4m(m.m& XIndent)
IVAR #

'Qa"E-fwfc'
0,Q2m(m.m& XIndent)
IBEGINQa"E-fwfc'
[email protected] Comments"Ni gComment BegingngComment End'I

0,Q3m(m.m& XIndent)
Qb:"EI#'I

0,Q2m(m.m& XIndent)
IENDgsQa"E-fwfc'
[email protected] Comments"Ni gComment BegingngComment End'
.[rQpJs#-DQp,Qr-1,F@m(m.m& Pascal Subroutine)FUNCTION;-F@m(m.m& Pascal Subroutine)PROCEDURE;+F@m(m.m& Pascal Subroutine)PROGRAM.1fm(m.m& Pascal REPEAT-RECORD)REPEATUNTIL/fm(m.m& Pascal REPEAT-RECORD)RECORDEND6FF*[b
[c:ic
[d:id
Qb"L-Qb+1'"#.,.'M(M.M& Save for Undo)Insert c Statement
.[p.[s
.([email protected] Block Word"E
0L@F 	LQp-."LQpJ''
fsHPos[1)J
Q1+([email protected] after c)[2
Ic
Qb"L.
[email protected] Capitalization"E
Qs,.fc'
-Qb+1:L
Q2-Q1m(m.m^R Indent Rigidly)
:J.Us'
"#i

0,Q2m(m.m& XIndent)'
i

0,Q1m(m.m& XIndent)Id#;
[email protected] Capitalization"E
Qs,.fc'
.[rQpJs#-DQp,Qr-1&FF*[b
Qb"L-Qb+1'"#.,.'M(M.M& Save for Undo)Insert BEGIN/END
.[p.[s
.([email protected] Block Word"E
0L@F 	LQp-."LQpJ''
fsHPos[1)J
Q1+([email protected] after BEGIN)[2
IBEGIN
Qb"L.
[email protected] Capitalization"E
Qs,.fc'
-Qb+1:L
Q2-Q1m(m.m^R Indent Rigidly)
:J.Us'
"#i

0,Q2m(m.m& XIndent)'
i#

0,Q1m(m.m& XIndent)IEND;
[email protected] Capitalization"E
Qs,.fc'
.[rQpJs#-DQp,Qr-1A[1[2
:I*[0
@:@FO..Q0[.3
Q.3"G&2"E''
Q.3"L-'Q.3[3
FSQPPTR[8
Q..Q[..OQ..Q[4
Q3*5J
1F[NOQUIT
Q.3"LQ:4(0)*5,0IQ0U:4(Q3)0U:4(2+Q3)'
"#Q:4(1+Q3)+99"N''
U:4(1+Q3)
&1"E'
Q8FSQPUN
QBuffer Index[9
Q.B[..O
(Q:.B(Q9)+Q9)*5J
1F[NOQUIT
10,0I
Q0,.-10FSWORD
-99,.-5FSWORD
Q:.B(Q9)+2U:.B(Q9)

PASCAL2Package for editing Pascal code (Pascal Mode).+S Put functions into MM vars for speed.>C Set up for editing PASCAL code.
"(* " and " *)" become comment delimiters.
The syntax table (..D) is set up for PASCAL indentation.
If PASCAL ..D exists, its value is used.
Calls user-providable macro, PASCAL Mode Hook, which can put pascal
    functions into desired keys.  If no hook exits, calls
    & Default Init PASCAL Mode.  See the description of that subr
    for more details on what it does and how to construct your own.
    The suggestion is that your PASCAL Mode Hook call & Default Init
    PASCAL Mode then change anything you want different. 5S Default setup for PASCAL mode.
It sets up the following characters for this mode and buffer:
    RUBOUT	Tab-hacking rubout,
    C-RUBOUT    Normal rubout,
    TAB 	^R Indent Pascal Stmt,
    M-{ 	^R Slurp Pascal To Char.
    M-} 	^R Insert Pascal End.
    M-(		^R Find Unmatched Paren
    M-|		^R Toggle Indentation
    C-M-'	^R Start String
    C-M-+	^R Plus One
Turns on Auto Fill if Pascal Auto Fill Default is non-0.^R Show unmatched paren if there is one.
Argument is number of seconds to stay at paren,
if no argument stays there permanently.^R Indentation for Pascal code.
If numeric arg, calls ^R Indent Nested,
  Else if not at left margin, calls ^R PASCAL Indent Relative.
  Else parses back to calculate proper indentaion, except setting the
    variable Indent Align Only to non-zero will make it always just
    align (call ^R Indent Nested).
Print Last Pascal Indenter will print the name of the indentation
    function called.rC backward skipping paren groupings & white space to start
of line, but will skip lines for parens or quotes.7C Back over white space, comments, strings, CRLF's C Moves back to beyond a BEGIN/END block.  Assumes it is
already <arg> deep. (arg = -1 means starting behind an END).  Arg must be
less than zero.RC Assumes it''s starting at the start of a line with
no existing indentation.^R Turn off or on PASCAL Mode indentation 
With no arg arg, toggles value of Indent Align Only; otherwise puts arg
in Indent Align Only.W^R Insert end and show matching block.
Indents under matching BEGIN, LOOP, CASE, RECORD, or REPEAT.
Displays buffer around matching block statement.
    ARG = number of seconds to display there.
Inserts a comment after the "END;" to show what was ended.
    If the "BEGIN" is commented, it copies down that comment,
    otherwise it tries to construct one from the code. e.g.
    "(* while not eoln *)"  or  "(* for i:= 1 to 7 *)".
    If you don't like the comment you can kill it with ^R Kill Comment.

If matching block is REPEAT, inserts UNTIL and puts point between UNTIL and ;.gC Indents each line from here to MARK.
On each line it:
    moves past comments to first token,
    kills indentation,
    then calls ^R Indent Pascal Stmt.
Leaves mark and point around changed region. Can be fixed with M-X Undo.
At end, expands all abbreviations in the region if in capitalize mode.

This subroutine is NOT recommended for any large blocks (over 10 lines)
of code, because there are MANY special cases which are indented wrong,
and it is very inefficient.2^R Pascal Indent Relative to last line's words.
Successive calls get successive indentation points;  each call
    aligns under ARGth next word in previous line.
Words are separated by spaces, tabs, semicolons, commas, periods.
To facilitate moving into a line, and changing an indentation, if
    there is whitespace to the right and left (i.e. this is a new
    indent call here), then the cursor is moved one column left.C Recursive edit for large block of comments
Comment column is set to 10, auto fill mode is turned on,
^R Indent for Comment is called initially,
Comment Start is set to "(**" to mark global comments.
"(*** *)" (comment with just a *) expand into (* * * *... *),
    aligned with any surrounding global comments (for boxes),
    or if no surrounding comments expand into Pascal Star Line Width wide
    (default is 51).
When recursive error returns, comment-ends within each global comment
  will be vertically aligned.<S Ends within contiguous global comments.
Contiguous global comments are comments starting with "(**", on
    successive lines.
Contiguous global comments have their comment-ends aligned vertically.
If a global comment consists soley of "*", i.e. it is "(*** *)",
    then it will expand out into a "(* * * * * ...* *)" comment, aligned
    with its contiguous global comments.  If no contiguous comments,
    expands out into (* * *...*), Pascal Star Line Width wide, default 51,
    and extending to left margin.
After alignment, "(**" is replaced by "(* ".W^R Exit large comment ^R.
Calls ^R End Comment, then exits ^R, so that global comment ^R
    is ended, and comment column will be reset to its old (one-line
    comment form) value.
If given an ARG, will inhibit alignment of global comment-ends, by
    replace all global comment-starts ("(**") by regular comment-starts
    ("(* ").5^R Prev line back to CHAR moved to point, indented.
Non-comment text from previous line (back to CHAR typed) is moved
    onto the current line, after indentation, and then ^R Indent
    Pascal Stmt is called to re-align.  Now that the prev line is
    changed, things might look better.
Any comment on prev line is left there, and ^R Indent for Comment is
    called on it to align it after the text is removed from before it.9C Print name of last function used to do indentation.2C Turn on capitalization of keywords.
With 0 argument, turns off capitalization.
Uses the WORDAB library and a file of pre-defined abbreviations
   which are the keywords.C Expand all WORDAB abbreviations in region.
Assumes WORDAB already loaded.
Comments and strings are skipped, but assumes that it's not started in one.i^R Set up a string of length <arg>, and overwrite.
Supply length of desired string as numeric argument (default is 10).
The string is created, full of spaces.
You enter a recursive editing level in overwrite mode
with point at the beginning of the string.
Overwrite the contents, then use ^R Exit to turn
off overwrite mode and move past the string.Q^R Make Pascal assgt stmt to increment word before point.
Saves for undoing.C Sets up a structured pascal WITH, WHILE, FOR, or CASE 
statement.  WITH, WHILE, FOR, or CASE is the first string argument; OF or
BEGIN is the second.Z^R Sets up a structured WHILE statement.
See PASCAL info node for customization information.
Positive argument means do not insert BEGIN and END;
negative arg means try to surround -<arg> lines within BEGIN/END.X^R Sets up a structured FOR statement.
See PASCAL info node for customization information.
Positive argument means do not insert BEGIN and END;
negative arg means try to surround -<arg> lines within BEGIN/END.Y^R Sets up a structured WITH statement.
See PASCAL info node for customization information.
Positive argument means do not insert BEGIN and END;
negative arg means try to surround -<arg> lines within BEGIN/END.C^R Sets up a structured CASE statement.
See PASCAL info node for customization information.
Negative arg means try to surround -<arg> lines within BEGIN/END;
you don't want a positive arg.W^R Sets up a structured IF statement.
See PASCAL info node for customization information.
Positive argument means do not insert BEGIN and END;
negative arg means try to surround -<arg> lines within BEGIN/END.R^R Set up matching ELSE statement.
Positive argument means do not insert BEGIN/END; negative arg
means enclose -<arg> lines withing the BEGIN/END.
It will delete a ; if it finds one on the previous line.,C Sets up a PROCEDURE or FUNCTION block.h^R Inserts a FUNCTION block.
Uses the minibuffer to read the name and arguments.
See Pascal info node for customization information.
Sets up a VAR statement, unless it is given an argument.
Indents to this lines indentation.i^R Inserts a PROCEDURE block.
Uses the minibuffer to read the name and arguments.
See Pascal info node for customization information.
Sets up a VAR statement, unless it is given an argument.
Indents to this lines indentation.g^R Inserts a PROGRAM block.
Uses the minibuffer to read the name and arguments.
See Pascal info node for customization information.
Sets up a VAR statement, unless it is given an argument.
Indents to this lines indentation.&^R Inserts a REPEAT statement.
See PASCAL info node for customization information.
If given a negative argument, surrounds -<arg> lines within the
REPEAT/UNTIL'^R Inserts a RECORD with the END.
See PASCAL info node for customization information.
If given a negative argument, surrounds -<arg> lines within the
RECORD/END$C Powerhorse for REPEAT & RECORDk^R Writes a BEGIN/END pair
If given a negative argument, encloses -<arg> lines between the
BEGIN/END.5C Makes a variable only if none exists.
If there is a non-zero, pre-comma arg, it also makes a local variable.
Code mostly stolen from & Make Variable, and Make Local Variable& Setup PASCAL Library
PASCAL Mode
& Default Init PASCAL Mode
^R Find Unmatched Paren
^R Indent PASCAL Stmt
- Pass Over
& Back to Token
& Back Level
& Indent Line
^R Toggle Indentation
^R Insert Pascal End
Indent Pascal Region
^R Pascal Indent Relative
Global Pascal Comment
& Align Global Pascal Comment Ends
^R End Global Pascal Comment
^R Slurp Pascal to Char
Print Last Pascal Indenter
Capitalize Pascal Keywords
Expand Abbrevs in Region
^R Start String
^R Plus One
& Pascal DO-OF
^R Pascal WHILE
^R Pascal FOR
^R Pascal WITH
^R Pascal CASE
^R Pascal IF
^R Pascal ELSE
& Pascal Subroutine
^R Pascal FUNCTION
^R Pascal PROCEDURE
^R Pascal PROGRAM
^R Pascal REPEAT
^R Pascal RECORD
& Pascal REPEAT-RECORD
^R Pascal BEGIN
Maybe Make Variable
T+8+fq(+4)[20[3
<%3,-q2f2u3q3&1@;q3"l0'>
f[BBindq3-1*5,q3*5g2q:..o(0)+q2